package com.centerm.structure.service;

import java.util.List;

import com.centerm.common.view.page.PageQueryResult;
import com.centerm.structure.domain.User;
import com.centerm.structure.dto.UserInfo;

/**
 * User 用户Service层接口
 * 
 * @author czy
 *
 */
public interface UserService {

	/**
	 * @Description: 获取所有用户名记录
	 * @author czy
	 * @date 2017年8月10日
	 * @param
	 * @return List<User>
	 */
	List<User> listAllName();

	/**
	 * @Description: 根据id集合获取所有用户记录
	 * @author czy
	 * @date 2017年8月10日
	 * @param ids
	 *            ：用户id集合
	 * @return List<User>
	 */
	List<User> listByIds(String ids);
	
    /**
     * @Description 查询分页记录列表
     * @author czy
     * @param departmentIdList 
     * @date 2017年8月8日
     * @param pageNum:页数，pageSize:每页记录数
     * @return PageQueryResult<UserInfo>
     */
    PageQueryResult<UserInfo> pageUserInfoList(Integer pageNum, Integer pageSize, 
            UserInfo userInfo, List<Integer> departmentIdList);

    /**
     * @Description 根据条件查询记录列表
     * @author czy
     * @date 2017年8月8日
     * @param userInfo
     * @return List<UserInfo>
     */
    List<User> listByParam(UserInfo userInfo);

    
    /**
     * @Description 新增记录信息
     * @author czy
     * @date 2017年8月8日
     * @param userInfo
     * @return 记录id
     */
    Integer insert(UserInfo userInfo);
    
    /**
     * @Description 修改记录信息
     * @author czy
     * @date 2017年8月8日
     * @param userInfo
     * @return 更新记录数
     */
    Integer update(UserInfo userInfo);
    
    /**
     * @Description 删除记录信息
     * @author czy
     * @date 2017年8月8日
     * @param 用户id
     * @return 删除记录数
     */
    Integer delete(Integer id);
    
	/**
     * 验证用户帐号是否存在
     * @author czy
	 * @date 2017年8月14日
     * @param uid:用户帐号
     * @return true or false
     */
	Boolean existUid(String uid);

	/**
     * @Description 根据id获取用户详细信息
     * @author lk
     * @date 2017年8月8日
     * @param 用户id
     * @return 用户详细信息
     */
    UserInfo getUserInfoById(Integer userId);

    /**
     * @Description 修改用户密码
     * @author lk
     * @date 2017年9月4日
     * @param userRequest
     * @return
     */
    Integer updatePassWord(UserInfo userInfo);

    /**
     * @Description 重置用户部门为根节点
     * @author lk
     * @date 2017年9月4日
     * @param userRequest
     * @return
     */
    Integer deleteUserDeparment(UserInfo userInfo);

    /**
     * @Description 根据部门ID获取部门下所有人员列表（包括子部门）
     * @author lk
     * @date 2017年9月11日
     * @param userInfo
     * @param departmentIdList
     * @return
     */
    List<UserInfo> listDepartmentMember(UserInfo userInfo, List<Integer> departmentIdList);
}
